package com.example.gateway.designPattern.prototype;

/**
 * @ClassName: Client
 * @Description:
 * @Author: YourName
 * @Date: 2024/12/30
 */

public class Client {


    public static void main(String[] args) throws CloneNotSupportedException {
        /*
         * 原型模式
         * 原型模式的本质就是 clone，可以解决构建复杂对象的资源消耗问题，
         * 能再某些场景中提升构建对象的效率；
         * 还有一个重要的用途就是保护性拷贝，可以通过返回一个拷贝对象的形式，实现只读的限制。
         *
         *   spring bean 的创建有两种模式  单例 何 原型 。 其中配置原型时  bean的重复创建就使用的 原型设计模式 clone
         */

        int i = 0;
        int MAX_COUNT = 10;
        EventTemplate et = new EventTemplate();
        Mail mailPrototype = new Mail(et);
        long start = System.currentTimeMillis();
        while (i < MAX_COUNT) {
            // 方式1 使用new的方式构建对象。如果该对象比较复杂 。 那么创建对象的时间会很长
            Mail mail = new Mail(et);
            // 方式2 使用原型模式构建对象。  可以解决构建复杂对象的资源消耗问题
            Mail mail1 = (Mail) mailPrototype.clone();
            i++;
        }
        long end = System.currentTimeMillis();
        System.out.println("用时:" + (end - start));

    }
}
